package main

import (
	"fmt"

)

func main() {
	// var arr1 [3]int
	// var arr2 [4]int
	// var strArr [3]string
	// fmt.Printf("arr1=%T  arr2=%T, strArr=%T",arr1,arr2,strArr)
	// golang初始化数组
	// 第一种方法
	// var strArr1 [3]int
	// fmt.Println(strArr1)
	// strArr1[0] =23
	// strArr1[1] =10
	// strArr1[2] =65
	// fmt.Println(strArr1)
	// 初始化一个string数组
	// var strArr [6]string
	// strArr[0]="php"
	// strArr[1]="Java"
	// strArr[2]="golang"
	// fmt.Println(strArr)

	// 初始化第2种方法
	// var arr1 =[3]int{23,34,5}
	// fmt.Println(arr1)
	// var arr1 =[3]string{"php","node.js","golang"}
	// fmt.Println(arr1)

	// // 类型推导
	// arr4 :=[3]string{"php","node.js","golang"}
	// fmt.Println(arr4)
	// 数组初始化第4种方法
	// var arr1 =[...]int{12,234,3455,666,999,888,777,555}
	// fmt.Println(arr1)
	// fmt.Println(len(arr1))
	// 注意数组的长度 不能进行扩展 可以改变数组里面的值
	// var arr1 =[...]string{"java","php"}
	// arr1[2]="GO"
	// fmt.Println(arr1)
	// fmt.Println(len(arr1))

	// 第四种初始化数组的方法 指定数组的索引来设置值
	// arr :=[...]int{0:1,1:10,2:30,5:50}
	// fmt.Println(len(arr))  //6
	// fmt.Println(arr) 

	// 数组的循环遍历
	// var arr1 = [3]int{23,34,5}
	// for i:=0;i<len(arr1);i++{
	// 	fmt.Println(arr1[i])
	// }
	// 通过for range来循环遍历
	// arr1 := [...]int{23,34,5}
	// for _,value := range arr1{
	// 	fmt.Printf(" value:%v\n",value)
	// }
	// 求一个数组元素里面元素的和以及这些元素的平均值
	// var arr=[...]int{12,23,45,67,2,5}
	// var sum =0
	// var average float64
	// for i:=0;i<len(arr);i++{
	// 	sum +=arr[i]
	// 	// 把整形转换成浮点型计算
	// 	average =float64(sum)/float64(len(arr))
	// }
	// fmt.Printf("数组的和%v 平均值:%.2f",sum,average)

	// var arr =[...]int{1,-1,12,65,11}
	// var max =arr[0]
	// var index =0
	// for i:=0;i<len(arr);i++{
	// 	if max <arr[i]{
	// 		max=arr[i]
	// 		index =i 
	// 	}	
	// }
	// fmt.Printf("最大值:%v 最大值所对应的索引值:%v",max,index)

	// 从数组[1,3,5,7,8]中找出和为8的两个元素的下标分别为[0,3]和[1,2]
	// var arr =[...]int{1,3,5,7,8}
	// for i:=0;i<len(arr);i++{
	// 	for j:=i+1;j<len(arr) ;j++{
	// 		if(arr[i]+arr[j]==8){
	// 			fmt.Printf("(%v,%v)",i,j)
	// 		}
	// 	}
	// }

	// 值类型和引用类型
	// 基本数据类型和数组都是值类型
	// var a =10
	// b:=a
	// a =20

	// fmt.Println(a,b)

	// 引用类型
	// var arr1=[...]int{1,2,3}
	// arr2:=arr1
	// arr1[0] =11
	// fmt.Println(arr1)
	// fmt.Println(arr2)

	//引用类型切片 切片
	// var arr1=[]int{1,2,3}
	// arr2 :=arr1
	// arr1[0]=11
	// fmt.Println(arr1)
	// fmt.Println(arr2)

	// 数组是值类型
	// 值类型 改变变量副本值的时候不会改变本身的值
	// var arr1=[]int{1,2,3}
	// arr2 :=arr1
	// arr2[0]=111
	// fmt.Println(arr1)
	// fmt.Println(arr2)

	// 多维数组
	// var 数组变量名 [元素数量]
	// var arr =[3]int{1,2,3}  //一维数组
	// 二维数组的定义
	// var arr=[3][2]string{
	// 	{"北京","上海"},
	// 	{"广州","深圳"},
	// 	{"成都","重庆"},
	// }
	// fmt.Println(arr[0][1])
	// 循环遍历两次 使用for range循环遍历
	// var arr=[3][2]string{
	// 	{"北京","上海"},
	// 	{"广州","深圳"},
	// 	{"成都","重庆"},
	// }
	// for _,v1 := range arr{
	// 	for _,v2 :=range v1{
	// 		fmt.Println(v2)
	// 	}
	// }
	// fmt.Println(arr[0][1])

	// 使用for循环遍历
	// var arr=[3][2]string{
	// 	{"北京","上海"},
	// 	{"广州","深圳"},
	// 	{"成都","重庆"},
	// }
	// for i:=0;i<len(arr);i++{
	// 	for j :=0;j<len(arr[i]);j++{
	// 		fmt.Println(arr[i][j])
	// 	}
	// }
	// 定义二维数组的第一种方式
	var arr=[...][2]string{
		{"北京","上海"},
		{"广州","深圳"},
		{"成都","重庆"},
	}
	fmt.Println(arr)
}

